Set Interface এবং তার ইমপ্লিমেন্টেশন

জাভা ইউটিল.প্যাকেজ (Java.util Package) - Java Technologies

337

java.util.Set ইন্টারফেসটি Java Collections Framework-এর একটি গুরুত্বপূর্ণ অংশ। এটি একটি Collection ইন্টারফেসের অংশ, যা unique elements সংরক্ষণ করে এবং কোনো ডুপ্লিকেট মান অনুমোদিত নয়। Set একটি অর্ডারহীন কনটেইনার, অর্থাৎ এটি উপাদানগুলিকে কোনো নির্দিষ্ট অর্ডারে সজ্জিত করে না (যেমন HashSet বা TreeSet এর ক্ষেত্রে)। Set ইন্টারফেসের মূল সুবিধা হল যে এটি ডুপ্লিকেট উপাদান এড়াতে সাহায্য করে।


1. Set Interface

Set ইন্টারফেসের প্রধান বৈশিষ্ট্যগুলি:

  • Unique elements: Set-এ কোনো ডুপ্লিকেট উপাদান রাখা যায় না।
  • No guaranteed order: Set সাধারণত unordered হয়, তবে কিছু ইমপ্লিমেন্টেশন (যেমন TreeSet) অর্ডার অনুযায়ী উপাদান রাখে।
  • Implements Collection interface: এটি Collection ইন্টারফেসের একটি উপসেট, তাই অন্যান্য সকল Collection ফিচারগুলি সমর্থন করে।

Set ইন্টারফেসের প্রধান মেথডগুলো:

  • add(E e): সেটে একটি উপাদান যোগ করে।
  • remove(Object o): সেট থেকে একটি উপাদান মুছে ফেলে।
  • contains(Object o): সেটে একটি উপাদান আছে কি না, তা চেক করে।
  • size(): সেটের উপাদানগুলির সংখ্যা ফেরত দেয়।
  • clear(): সব উপাদান মুছে ফেলে।
  • isEmpty(): সেটটি খালি কি না তা চেক করে।

Set Interface এর ইমপ্লিমেন্টেশন:

Set ইন্টারফেসের বেশ কিছু ইমপ্লিমেন্টেশন রয়েছে, যার মধ্যে কিছু জনপ্রিয় ইমপ্লিমেন্টেশন হলো HashSet, LinkedHashSet, এবং TreeSet। প্রতিটি ইমপ্লিমেন্টেশন আলাদা আলাদা কার্যকারিতা এবং সুবিধা প্রদান করে।


2. HashSet

HashSet হল Set ইন্টারফেসের একটি জনপ্রিয় ইমপ্লিমেন্টেশন যা hashing ব্যবহার করে উপাদানগুলি সংরক্ষণ করে। এটি unordered, unique উপাদান সংরক্ষণ করে এবং দ্রুত O(1) অ্যাক্সেস প্রদান করে।

Key Features of HashSet:

  • Unordered: HashSet উপাদানগুলি নির্দিষ্ট অর্ডারে রাখে না।
  • Unique elements: এটি শুধুমাত্র ইউনিক উপাদান সংরক্ষণ করে, ডুপ্লিকেট এড়িয়ে যায়।
  • Faster operations: add(), remove(), contains() ইত্যাদি অপারেশনগুলির গতি সাধারণত O(1)

Example: HashSet Implementation

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        
        // Adding elements to the HashSet
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        
        // Adding a duplicate element
        set.add("Apple");  // This will be ignored as duplicates are not allowed
        
        // Display the HashSet
        System.out.println("HashSet: " + set);
        
        // Check if an element exists
        if(set.contains("Banana")) {
            System.out.println("Banana is in the set.");
        }
        
        // Remove an element
        set.remove("Orange");
        
        // Display the updated HashSet
        System.out.println("Updated HashSet: " + set);
    }
}

Output:

HashSet: [Apple, Banana, Orange]
Banana is in the set.
Updated HashSet: [Apple, Banana]

ব্যাখ্যা:

  • HashSet অর্ডার গ্যারান্টি দেয় না, তাই উপাদানগুলির অর্ডার প্রতিবার ভিন্ন হতে পারে।
  • ডুপ্লিকেট মান "Apple" উপেক্ষা করা হয়েছে।

3. LinkedHashSet

LinkedHashSet হল HashSet এর একটি বিশেষ প্রকার যা উপাদানগুলোকে insertion order অনুযায়ী সংরক্ষণ করে। এটি LinkedHashMap এর মত কাজ করে, যেখানে এলিমেন্টগুলোর জন্য একটি linked list ব্যবহৃত হয়। এটি unordered, তবে insertion order অনুযায়ী উপাদান প্রদর্শন করে।

Key Features of LinkedHashSet:

  • Ordered: LinkedHashSet উপাদানগুলি ইনসার্ট করা অর্ডার অনুযায়ী সাজায়।
  • Faster than TreeSet: LinkedHashSet TreeSet এর তুলনায় বেশি দ্রুত, কারণ এটি hashing ব্যবহার করে, কিন্তু insertion order বজায় রাখে।

Example: LinkedHashSet Implementation

import java.util.LinkedHashSet;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        LinkedHashSet<String> set = new LinkedHashSet<>();
        
        // Adding elements to the LinkedHashSet
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        
        // Adding a duplicate element
        set.add("Apple");  // This will be ignored as duplicates are not allowed
        
        // Display the LinkedHashSet
        System.out.println("LinkedHashSet: " + set);
    }
}

Output:

LinkedHashSet: [Apple, Banana, Orange]

ব্যাখ্যা:

  • LinkedHashSet ইনসার্ট করা অর্ডার অনুযায়ী উপাদানগুলো প্রদর্শন করে, কিন্তু এটি ডুপ্লিকেট উপাদান রাখে না।

4. TreeSet

TreeSet হল Set ইন্টারফেসের আরেকটি ইমপ্লিমেন্টেশন, যা sorted set হিসেবে কাজ করে। এটি Red-Black Tree ডেটা স্ট্রাকচার ব্যবহার করে, এবং এটি উপাদানগুলিকে স্বয়ংক্রিয়ভাবে সাজিয়ে রাখে।

Key Features of TreeSet:

  • Sorted: TreeSet উপাদানগুলো ascending order অনুযায়ী সাজায় (যদি না একটি কাস্টম comparator ব্যবহার করা হয়)।
  • Unique elements: এটি শুধুমাত্র ইউনিক উপাদান ধারণ করে, ডুপ্লিকেট এড়িয়ে চলে।
  • Slower than HashSet: TreeSet কিছুটা ধীর হতে পারে কারণ এটি উপাদানগুলো সাজাতে কাজ করে (গড় সময় O(log n))।

Example: TreeSet Implementation

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        
        // Adding elements to the TreeSet
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        
        // Adding a duplicate element
        set.add("Apple");  // This will be ignored as duplicates are not allowed
        
        // Display the TreeSet (automatically sorted)
        System.out.println("TreeSet: " + set);
    }
}

Output:

TreeSet: [Apple, Banana, Orange]

ব্যাখ্যা:

  • TreeSet স্বয়ংক্রিয়ভাবে উপাদানগুলিকে ascending order অনুযায়ী সাজিয়েছে।
  • TreeSet শুধুমাত্র ইউনিক উপাদান ধারণ করে, ডুপ্লিকেট উপাদানগুলো অগ্রাহ্য করে।

5. Comparison between HashSet, LinkedHashSet, and TreeSet

FeatureHashSetLinkedHashSetTreeSet
OrderingNo orderingInsertion orderSorted (ascending)
Null elementsAllowedAllowedNot allowed
PerformanceBest for general useSlightly slower than HashSetSlower (O(log n))
Duplicate elementsNot allowedNot allowedNot allowed

  • Set Interface Java Collections Framework-এর একটি গুরুত্বপূর্ণ অংশ, যা unique elements সংরক্ষণ করতে ব্যবহৃত হয় এবং ডুপ্লিকেট এড়াতে সহায়তা করে।
  • HashSet, LinkedHashSet, এবং TreeSet হল Set ইন্টারফেসের প্রধান ইমপ্লিমেন্টেশন।
    • HashSet দ্রুত কার্যকরী, কিন্তু অর্ডার না রাখলে,
    • LinkedHashSet ইনসার্ট করা অর্ডার বজায় রাখে, এবং
    • TreeSet স্বয়ংক্রিয়ভাবে উপাদানগুলিকে সাজায় (ascending order)।

প্রতিটি ইমপ্লিমেন্টেশন আলাদা আলাদা প্রয়োজনের জন্য উপযুক্ত, যেমন দ্রুত অ্যাক্সেস, ইনসার্ট করা অর্ডার বজায় রাখা, এবং সাজানো উপাদান। Java.util.Set ইন্টারফেসের এই ইমপ্লিমেন্টেশনগুলি ডেটা ব্যবস্থাপনার জন্য অত্যন্ত কার্যকরী।

Content added By

Set Interface হল Java Collections Framework এর একটি মৌলিক অংশ যা java.util প্যাকেজে অন্তর্ভুক্ত। এটি Collection ইন্টারফেসের একটি বিশেষায়িত রূপ যা একটি unordered (অবিশৃঙ্খল) সংগ্রহ তৈরি করতে ব্যবহৃত হয়, যেখানে ডুপ্লিকেট উপাদান থাকতে পারে না। অর্থাৎ, Set একটি সংগ্রহ যা শুধুমাত্র একক (unique) উপাদান রাখে এবং একে অন্যের উপর নির্ভর করে থাকে না (অথবা নির্দিষ্ট কোন অর্ডারে উপাদান রাখা হয় না)।

1. Set Interface এর ধারণা:

Set ইন্টারফেসটি এমন একটি Java Collection যেটি unique (একক) উপাদান রাখে এবং কোনো নির্দিষ্ট অর্ডারে (ordering) উপাদান রাখে না। Set ইন্টারফেসের অধীনে কয়েকটি সাধারণ ইমপ্লিমেন্টেশন রয়েছে যেমন: HashSet, LinkedHashSet, এবং TreeSet

Key Points:

  • Unordered Collection: Set ইন্টারফেসের অধিকাংশ ইমপ্লিমেন্টেশন অর্ডার বজায় রাখে না (অথবা শুধুমাত্র ইনসার্ট অর্ডার বা স্বাভাবিকভাবে সাজানো থাকে)।
  • No Duplicates: Set শুধুমাত্র একক (unique) উপাদান রাখতে পারে, অর্থাৎ একটি উপাদান একাধিক বার রাখা যাবে না।
  • Size: Set এর আকার ডুপ্লিকেট উপাদান বাদে নির্দিষ্ট সংখ্যা থেকে গঠিত।

2. Set Interface এর বৈশিষ্ট্য:

  1. Unique Elements: Set কোনো ডুপ্লিকেট উপাদান ধারণ করতে পারে না। এর মানে হল যে, যদি একই মান একাধিকবার যোগ করা হয়, তখন Set কেবলমাত্র প্রথম উপাদানটিই সংরক্ষণ করবে এবং বাকিগুলি উপেক্ষা করবে।
  2. No Indexing: Set ইন্টারফেসের মধ্যে ইনডেক্সিং বা পজিশনাল অ্যাক্সেস নেই। অর্থাৎ, আপনি Set এর উপাদানগুলোকে একটি নির্দিষ্ট অবস্থান দিয়ে অ্যাক্সেস করতে পারবেন না, যেমন List এ করতে পারেন।
  3. Unordered: Set-এর ইমপ্লিমেন্টেশনগুলি সাধারণত unordered (অবিশৃঙ্খল) থাকে। অর্থাৎ, উপাদানগুলি সংরক্ষিত অবস্থানে ইনসার্ট করা অর্ডারের উপর নির্ভর করে না।
  4. Flexible Implementations: Set ইন্টারফেসের অনেকগুলি ইমপ্লিমেন্টেশন রয়েছে (যেমন HashSet, LinkedHashSet, এবং TreeSet) যা ডেটার ধরন এবং প্রয়োজন অনুযায়ী বিভিন্ন বৈশিষ্ট্য প্রদান করে।

3. Set Interface এর প্রধান ইমপ্লিমেন্টেশনসমূহ:

Set ইন্টারফেসের বেশ কিছু ইমপ্লিমেন্টেশন রয়েছে যা Java Collections Framework এর মধ্যে রয়েছে। এগুলি হল:

  1. HashSet:
    • Unordered: এটি উপাদানগুলি অর্ডার ছাড়াই সংরক্ষণ করে।
    • Faster Performance: হ্যাশ টেবিল ব্যবহার করে HashSet খুব দ্রুত কাজ করে (O(1) এর গড় সময় জটিলতা)।
    • No Duplicates: HashSet ডুপ্লিকেট উপাদান অনুমোদন করে না।
  2. LinkedHashSet:
    • Ordered: এটি insert order অনুসারে উপাদানগুলিকে সজ্জিত করে, অর্থাৎ আপনি যখন উপাদান যোগ করবেন, তখন তাদের ইনসার্ট অর্ডার বজায় থাকবে।
    • Faster Performance: এটি HashSet এর মতো দ্রুত কিন্তু ইনসার্ট অর্ডার বজায় রাখে।
  3. TreeSet:
    • Sorted: এটি sorted (সাজানো) সংগ্রহ তৈরি করে, যেহেতু এটি একটি red-black tree ব্যবহার করে।
    • Natural Ordering: উপাদানগুলি natural ordering অনুসারে সাজানো হয়, তবে আপনি কাস্টম Comparator প্রদান করে সাজানোর পদ্ধতি পরিবর্তন করতে পারেন।

4. Set Interface এর কিছু জনপ্রিয় মেথড:

  • add(E e): এই মেথডটি Set-এ একটি নতুন উপাদান যোগ করার জন্য ব্যবহৃত হয়। যদি উপাদানটি ইতিমধ্যেই থাকে, তবে এটি কিছুই করবে না এবং false ফেরত দেবে।
  • remove(Object o): এই মেথডটি একটি নির্দিষ্ট উপাদান Set থেকে মুছে ফেলার জন্য ব্যবহৃত হয়।
  • contains(Object o): এটি Set-এ একটি উপাদান রয়েছে কিনা তা পরীক্ষা করে, এবং true বা false ফেরত দেয়।
  • size(): এই মেথডটি Set এর মধ্যে কতগুলো উপাদান আছে তা ফেরত দেয়।
  • clear(): এই মেথডটি Set থেকে সমস্ত উপাদান মুছে ফেলে।
  • isEmpty(): এটি পরীক্ষা করে যে Set খালি কি না। যদি খালি হয়, তবে true ফেরত দেয়, অন্যথায় false

5. Set Interface এর উদাহরণ:

Example 1: Basic Set Implementation using HashSet

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        // Create a Set using HashSet
        Set<String> fruits = new HashSet<>();
        
        // Add elements to the Set
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Apple");  // Duplicate element (will not be added)
        
        // Display the Set
        System.out.println("Fruits Set: " + fruits);  // Output: [Banana, Orange, Apple]
    }
}

Output:

Fruits Set: [Banana, Orange, Apple]

Example 2: TreeSet Example with Sorted Elements

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // Create a TreeSet
        Set<Integer> numbers = new TreeSet<>();
        
        // Add elements
        numbers.add(10);
        numbers.add(20);
        numbers.add(5);
        numbers.add(15);
        
        // Display the TreeSet (sorted)
        System.out.println("Sorted Numbers: " + numbers);  // Output: [5, 10, 15, 20]
    }
}

Output:

Sorted Numbers: [5, 10, 15, 20]

6. Set Interface এবং এর বৈশিষ্ট্যগুলির উপকারিতা:

  1. No Duplicates: Set ডুপ্লিকেট উপাদান সমর্থন না করে, তাই আপনি নিশ্চিত করতে পারেন যে আপনার সংগ্রহে কোনো উপাদান একাধিকবার নেই।
  2. Efficient Data Operations: Set ইন্টারফেসের ইমপ্লিমেন্টেশনগুলি দ্রুত গাণিতিক বা তথ্য সংশ্লিষ্ট কার্যক্রম পরিচালনা করতে সাহায্য করে। যেমন, HashSet অত্যন্ত দ্রুত কাজ করে (O(1) গড় সময়ে)।
  3. Sorting and Ordering: TreeSet এবং LinkedHashSet অর্ডার বজায় রাখে এবং সাজানোর জন্য উপযুক্ত।

  • Set Interface হল Java Collections Framework এর একটি গুরুত্বপূর্ণ অংশ, যা unique elements ধারণ করার জন্য ব্যবহৃত হয়।
  • এটি বিভিন্ন ইমপ্লিমেন্টেশন যেমন HashSet, LinkedHashSet, এবং TreeSet প্রদান করে যা ডেটার ধরনের উপর নির্ভর করে বিভিন্ন বৈশিষ্ট্য দেয়।
  • Set ইন্টারফেসে কোনো ডুপ্লিকেট উপাদান থাকবে না এবং এটি unordered বা sorted হতে পারে, যা সঠিকভাবে ডেটার সংগঠন এবং প্রক্রিয়ার জন্য সহায়ক।
Content added By

Java.util প্যাকেজে HashSet, LinkedHashSet, এবং TreeSet তিনটি Set ইন্টারফেসের বাস্তবায়ন (implementations) হিসেবে কাজ করে। এগুলি সবই Collection Framework এর অংশ এবং ডুপ্লিকেট আইটেম না রাখার জন্য ব্যবহৃত হয়। তবে, এই তিনটি Set এর মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা তাদের কর্মপদ্ধতি, পারফরম্যান্স এবং ব্যবহারিক ক্ষেত্রে প্রভাব ফেলে।

1. HashSet

HashSet হল Set ইন্টারফেসের একটি বাস্তবায়ন যা Hashing ব্যবহার করে উপাদানগুলোকে সংরক্ষণ করে। এটি কোনও নির্দিষ্ট অর্ডারে উপাদানগুলো সংরক্ষণ করে না এবং এটি ডুপ্লিকেট উপাদান গ্রহণ করে না। HashSet দ্রুত O(1) গতি সহ আইটেম অনুসন্ধান, যোগ করা এবং মুছে ফেলার জন্য সক্ষম, তবে এটি উপাদানগুলিকে কোনো নির্দিষ্ট অর্ডারে রাখে না।

ব্যবহার:

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> fruits = new HashSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // Adding duplicate element
        fruits.add("Apple");

        // Printing the set
        System.out.println("HashSet: " + fruits);
    }
}

Output:

HashSet: [Banana, Apple, Orange]

ব্যাখ্যা:

  • HashSet একটি unordered set যা duplicate values রাখে না। আপনি দেখতে পাবেন যে "Apple" দুটি বার যোগ করার পরও সেটে শুধুমাত্র একটি "Apple" থাকবে।

বিশেষত্ব:

  • Order: HashSet উপাদানগুলোকে unordered ভাবে সংরক্ষণ করে।
  • Performance: O(1) গতি সহ অনুসন্ধান, যোগ করা, মুছে ফেলা।

2. LinkedHashSet

LinkedHashSet হল HashSet এর একটি উন্নত সংস্করণ, যা insertion order (এটি যেখানে যোগ করা হয়েছিল সেই অর্ডারে) অনুসরণ করে। এটি LinkedHashMap ব্যবহার করে যার ফলে এতে order থাকে। যেমন HashSet, এটি ডুপ্লিকেট আইটেম গ্রহণ করে না, তবে এটি উপাদানগুলির অর্ডার বজায় রাখে।

ব্যবহার:

import java.util.LinkedHashSet;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        LinkedHashSet<String> fruits = new LinkedHashSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // Adding duplicate element
        fruits.add("Apple");

        // Printing the set
        System.out.println("LinkedHashSet: " + fruits);
    }
}

Output:

LinkedHashSet: [Apple, Banana, Orange]

ব্যাখ্যা:

  • LinkedHashSet উপাদানগুলোকে insertion order অনুসারে রাখে। এটি HashSet এর মতো কাজ করে তবে এতে insertion order বজায় রাখে।

বিশেষত্ব:

  • Order: LinkedHashSet উপাদানগুলোকে insertion order অনুসারে রাখে।
  • Performance: O(1) গতি সহ অনুসন্ধান, যোগ করা, মুছে ফেলা (যেহেতু এটি Hashing ব্যবহার করে), তবে insertion order বজায় রাখতে একটু অতিরিক্ত সময় নেয়।

3. TreeSet

TreeSet হল SortedSet ইন্টারফেসের একটি বাস্তবায়ন, যা উপাদানগুলিকে sorted অবস্থায় রাখে। এটি TreeMap এর ভিত্তিতে কাজ করে এবং উপাদানগুলোকে natural ordering বা একটি নির্দিষ্ট Comparator অনুযায়ী সাজায়। TreeSet ডুপ্লিকেট উপাদান গ্রহণ করে না এবং এটি O(log n) সময়ে সব ধরনের অপারেশন সম্পাদন করে।

ব্যবহার:

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<String> fruits = new TreeSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // Adding duplicate element
        fruits.add("Apple");

        // Printing the set
        System.out.println("TreeSet: " + fruits);
    }
}

Output:

TreeSet: [Apple, Banana, Orange]

ব্যাখ্যা:

  • TreeSet উপাদানগুলোকে sorted (যেমন alphabetical order বা numerical order) রাখে। এটি Comparator ব্যবহার করে কাস্টম সাজানোরও সুযোগ দেয়।

বিশেষত্ব:

  • Order: TreeSet উপাদানগুলোকে sorted অবস্থায় রাখে, এবং natural ordering বা Comparator অনুযায়ী সাজাতে পারে।
  • Performance: O(log n) সময়ে সমস্ত অপারেশন সম্পাদিত হয়, কারণ এটি binary tree ভিত্তিক।

HashSet, LinkedHashSet, এবং TreeSet এর পার্থক্য

FeatureHashSetLinkedHashSetTreeSet
OrderingNo ordering, unorderedInsertion order maintainedSorted order (natural or custom)
DuplicatesDoes not allow duplicatesDoes not allow duplicatesDoes not allow duplicates
PerformanceO(1) for add, remove, and containsO(1) for add, remove, and containsO(log n) for add, remove, and contains
ImplementationHash table basedHash table + Linked listRed-Black tree based
Null ElementsAllows null valuesAllows null valuesAllows null values (if natural ordering allows)
Use CaseWhen ordering is not requiredWhen insertion order mattersWhen sorted order is required

When to Use Which Set?

  1. HashSet:
    • ব্যবহার করুন যখন অর্ডার গুরুত্বপূর্ণ নয় এবং ডুপ্লিকেট উপাদান না রাখার প্রয়োজন আছে।
    • যেমন: বড় ডেটাসেটে দ্রুত অনুসন্ধান এবং যোগ করা।
  2. LinkedHashSet:
    • ব্যবহার করুন যখন ইনসার্শন অর্ডার বজায় রাখতে হবে।
    • যেমন: ডেটা সংরক্ষণ করতে চান যাতে যেভাবে যুক্ত করা হয়েছিল, সেভাবে বের করা হয় (তবে ডুপ্লিকেট থাকবে না)।
  3. TreeSet:
    • ব্যবহার করুন যখন উপাদানগুলোকে সাজানো রাখতে হবে (প্রাকৃতিকভাবে বা কাস্টম অর্ডারে)।
    • যেমন: একটি ডেটা সেটের উপাদানগুলো সাজানো অবস্থায় থাকতে হবে, যেমন একটি sorted list

  • HashSet, LinkedHashSet, এবং TreeSet হল Set ইন্টারফেসের তিনটি জনপ্রিয় বাস্তবায়ন, যা duplicates বন্ধ করার জন্য ব্যবহৃত হয়।
  • HashSet দ্রুত গতি প্রদান করে, কিন্তু উপাদানগুলো কোনো নির্দিষ্ট অর্ডারে রাখে না।
  • LinkedHashSet ইনসার্শন অর্ডার বজায় রাখে, তবে একটু অতিরিক্ত মেমরি ব্যবহার করে।
  • TreeSet উপাদানগুলোকে সাজানো অবস্থায় রাখে, কিন্তু এর পারফরম্যান্স O(log n) সময় নেয়।

এই তিনটি Set ইন্টারফেসের বাস্তবায়ন তাদের নির্দিষ্ট ব্যবহার ক্ষেত্রে উপযুক্ত এবং আপনার প্রয়োজন অনুযায়ী নির্বাচন করা উচিত।

Content added By

Set ইন্টারফেস java.util প্যাকেজের একটি গুরুত্বপূর্ণ অংশ, যা একটি অর্ডারহীন এবং duplicate উপাদান ছাড়া সংগ্রহ (collection) তৈরি করে। Set সাধারণত unordered থাকে এবং একটি unique collection হিসেবে কাজ করে, যেখানে কোনো duplicate মান থাকবে না।

Set ইন্টারফেসে কিছু গুরুত্বপূর্ণ মেথড রয়েছে যা elements যোগ, মুছে ফেলা এবং পরীক্ষা করতে ব্যবহৃত হয়। এই মেথডগুলির মধ্যে অন্যতম হচ্ছে add(), remove(), এবং contains()

1. add() Method

add() মেথডটি Set এর একটি উপাদান যোগ করতে ব্যবহৃত হয়। যদি উপাদানটি ইতিমধ্যে সেটে উপস্থিত থাকে, তবে এটি কিছুই পরিবর্তন করে না, কারণ Set-এর মধ্যে duplicate উপাদান রাখা যায় না। এই মেথডটি boolean রিটার্ন করে যা বলে দেয় যে উপাদানটি সফলভাবে যোগ করা হয়েছে কি না।

Syntax:

boolean add(E e);
  • E: উপাদানটির টাইপ।
  • true: যদি নতুন উপাদানটি সফলভাবে যোগ করা হয়।
  • false: যদি উপাদানটি ইতিমধ্যে সেটে থাকে (অর্থাৎ কোন পরিবর্তন হয়নি)।

Example:

import java.util.HashSet;

public class AddMethodExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();

        // Adding elements to the set
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");

        // Adding a duplicate element
        boolean isAdded = set.add("Apple");  // This will not be added
        System.out.println("Was 'Apple' added again? " + isAdded);

        System.out.println("Set: " + set);
    }
}

Output:

Was 'Apple' added again? false
Set: [Apple, Banana, Orange]

ব্যাখ্যা:

  • add() মেথডের মাধ্যমে নতুন উপাদান Set এ যোগ করা হয়েছে। যখন "Apple" পুনরায় যোগ করার চেষ্টা করা হয়, এটি সফল হয়নি কারণ Set ডুপ্লিকেট উপাদান রাখে না।

2. remove() Method

remove() মেথডটি Set থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলার জন্য ব্যবহৃত হয়। যদি উপাদানটি সেটে থাকে, তবে এটি মুছে ফেলা হয় এবং true রিটার্ন করা হয়; অন্যথায় false রিটার্ন হয়।

Syntax:

boolean remove(Object o);
  • o: মুছে ফেলা উপাদান।
  • true: যদি উপাদানটি সফলভাবে মুছে ফেলা হয়।
  • false: যদি উপাদানটি সেটে না থাকে (অথবা এটি আগে থেকেই মুছে ফেলা হয়েছে)।

Example:

import java.util.HashSet;

public class RemoveMethodExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        
        // Adding elements to the set
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");

        // Removing an element
        boolean isRemoved = set.remove("Banana");  // This will be removed
        System.out.println("Was 'Banana' removed? " + isRemoved);

        // Trying to remove an element that doesn't exist
        isRemoved = set.remove("Grapes");
        System.out.println("Was 'Grapes' removed? " + isRemoved);

        System.out.println("Set: " + set);
    }
}

Output:

Was 'Banana' removed? true
Was 'Grapes' removed? false
Set: [Apple, Orange]

ব্যাখ্যা:

  • remove() মেথডটি Set থেকে একটি উপাদান মুছে ফেলেছে এবং সফলভাবে "Banana" মুছে ফেলা হয়েছে। তারপর "Grapes" এর জন্য false রিটার্ন করা হয়েছে, কারণ এটি সেটে ছিল না।

3. contains() Method

contains() মেথডটি পরীক্ষা করে যে একটি নির্দিষ্ট উপাদান Set-এ উপস্থিত আছে কিনা। এটি true রিটার্ন করে যদি উপাদানটি Set-এ থাকে এবং false রিটার্ন করে যদি না থাকে।

Syntax:

boolean contains(Object o);
  • o: যে উপাদানটি চেক করা হচ্ছে।
  • true: যদি উপাদানটি Set-এ উপস্থিত থাকে।
  • false: যদি উপাদানটি Set-এ না থাকে।

Example:

import java.util.HashSet;

public class ContainsMethodExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();

        // Adding elements to the set
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");

        // Checking if an element is present in the set
        boolean isPresent = set.contains("Apple");
        System.out.println("Is 'Apple' in the set? " + isPresent);

        isPresent = set.contains("Grapes");
        System.out.println("Is 'Grapes' in the set? " + isPresent);
    }
}

Output:

Is 'Apple' in the set? true
Is 'Grapes' in the set? false

ব্যাখ্যা:

  • contains() মেথডটি পরীক্ষা করেছে যে Set-এ "Apple" এবং "Grapes" উপস্থিত আছে কিনা। এখানে "Apple" উপস্থিত ছিল, কিন্তু "Grapes" ছিল না, তাই false রিটার্ন হয়েছে।

Set Interface এর অন্যান্য মেথডসমূহ:

  • size(): সেটে কতটি উপাদান আছে তা রিটার্ন করে।
  • isEmpty(): সেটটি খালি কিনা তা চেক করে।
  • clear(): সেটের সমস্ত উপাদান মুছে ফেলে।

Example: Other Methods of Set

import java.util.HashSet;

public class OtherMethodsExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");

        System.out.println("Size of set: " + set.size());  // Size of set
        System.out.println("Is set empty? " + set.isEmpty());  // Check if set is empty

        set.clear();  // Clear all elements
        System.out.println("Is set empty after clear? " + set.isEmpty());  // Check if set is empty
    }
}

Output:

Size of set: 2
Is set empty? false
Is set empty after clear? true

Set ইন্টারফেস Java-এ একটি অত্যন্ত গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা duplicate উপাদান সমর্থন করে না এবং অর্ডার বজায় রাখে না। add(), remove(), এবং contains() মেথডগুলো Set-এর মূল অপারেশন হিসেবে ব্যবহৃত হয়। এই মেথডগুলো Set এর মধ্যে উপাদান যোগ করা, মুছে ফেলা এবং উপস্থিতি চেক করার জন্য গুরুত্বপূর্ণ।

  • add(): নতুন উপাদান যোগ করা।
  • remove(): একটি নির্দিষ্ট উপাদান মুছে ফেলা।
  • contains(): একটি উপাদান সেটে উপস্থিত কিনা তা পরীক্ষা করা।

এছাড়াও size(), isEmpty(), clear() ইত্যাদি মেথডগুলো Set এর কার্যকারিতা বাড়াতে ব্যবহৃত হয়।

Content added By

Java.util Package এর Set Interface একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা unique elements ধারণ করার জন্য ডিজাইন করা হয়েছে। Set হল একটি Collection ইন্টারফেসের একটি বিশেষায়িত ফর্ম, যেখানে শুধুমাত্র একক মান (unique values) থাকতে পারে এবং ডুপ্লিকেট উপাদান থাকতে পারে না।

Set Interface এর ধারণা

Set একটি unordered collection (অর্ডার নেই) যা unique elements রাখে। Java তে Set Interface java.util.Collection ইন্টারফেস থেকে বর্ধিত (extend) হয়েছে এবং এটি List এবং Queue এর মতো অন্যান্য সংগ্রহের ক্লাসের থেকে আলাদা, কারণ এতে ডুপ্লিকেট উপাদান থাকতে পারে না। এর মানে হলো Set এ একাধিক একে অপরের সমান উপাদান রাখা সম্ভব নয়।

Set Interface এর বৈশিষ্ট্য:

  1. Unique Elements: Set ডুপ্লিকেট মান অনুমোদন করে না। যখন আপনি একটি নতুন উপাদান যোগ করেন, এটি প্রথমে চেক করবে যে উপাদানটি ইতোমধ্যে সেটে রয়েছে কি না। যদি থাকে, তবে এটি নতুন উপাদানটি যুক্ত করবে না।
  2. Unordered: Set সাধারণত অর্ডার বজায় রাখে না, তাই আপনি যেভাবে উপাদানগুলো যুক্ত করবেন, সেগুলি ঠিক সেই অর্ডারে ফিরে পাবেন না (যেমন HashSet এ)।
  3. No Indexing: Set এ কোনও indexing (যেমন List বা Array) নেই, অর্থাৎ আপনি কোন উপাদানটি কোথায় রয়েছে তা সুনির্দিষ্টভাবে চিহ্নিত করতে পারবেন না।
  4. Immutability: Set এর কিছু বাস্তবায়ন ইমমিউটেবল (অপরিবর্তনীয়) হতে পারে, যেমন Set.of() যা অ্যালোড করে অপরিবর্তনীয় সেট।

Set Interface এর কিছু জনপ্রিয় Implementations:

  1. HashSet: এটি Set ইন্টারফেসের সবচেয়ে জনপ্রিয় এবং সাধারণ বাস্তবায়ন। এটি unordered এবং unique উপাদান ধারণ করে এবং সেটে উপাদানগুলোকে অর্ডার করে না।
  2. LinkedHashSet: এটি HashSet এর মতো, তবে উপাদানগুলো ইনসার্ট হওয়ার অর্ডারে রাখা হয়।
  3. TreeSet: এটি Set এর একটি সুশৃঙ্খল (sorted) বাস্তবায়ন, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে।

Set এর মধ্যে Unique Elements Management

যেহেতু Set ডুপ্লিকেট উপাদানগুলিকে অনুমোদন করে না, তাই Set এর মাধ্যমে ইউনিক এলিমেন্টস ম্যানেজ করা খুবই সহজ। যখনই আপনি নতুন উপাদান Set তে যোগ করতে চান, Set তার মধ্যে unique উপাদান থাকছে কি না তা নিশ্চিত করে।

Set এর মাধ্যমে Unique Elements Management এর উদাহরণ:

import java.util.HashSet;
import java.util.Set;

public class SetUniqueElementsExample {
    public static void main(String[] args) {
        // Create a Set (HashSet) to store unique elements
        Set<String> uniqueNames = new HashSet<>();
        
        // Adding elements to the Set
        uniqueNames.add("Alice");
        uniqueNames.add("Bob");
        uniqueNames.add("Charlie");
        uniqueNames.add("Alice");  // Duplicate element, will not be added
        
        // Display the elements of the Set
        System.out.println("Unique Names: " + uniqueNames);
    }
}

Output:

Unique Names: [Alice, Bob, Charlie]

ব্যাখ্যা:

  • uniqueNames.add("Alice"): এখানে প্রথমবার Alice যুক্ত করা হয়।
  • uniqueNames.add("Alice"): দ্বিতীয়বার যখন Alice যোগ করার চেষ্টা করা হয়, তখন এটি ডুপ্লিকেট হিসেবে বিবেচিত হয় এবং এটি অগ্রাহ্য করা হয়।
  • HashSet ডুপ্লিকেট মান যোগ করতে দেয় না, তাই Set কেবল একবার Alice মানটিই রাখে।

Set এর মধ্যে Unique Elements Management এর বিশেষ বৈশিষ্ট্যসমূহ:

  1. ডুপ্লিকেট এন্ট্রির ব্লকিং:
    • Set ডুপ্লিকেট মানকে স্বয়ংক্রিয়ভাবে ব্লক করে, যাতে আপনি কোনো উপাদান পুনরায় যুক্ত করার চেষ্টা করলে সেটে তা যুক্ত হবে না।
  2. উন্নত পারফরম্যান্স:
    • HashSet এবং TreeSet বাস্তবায়নগুলিতে ডুপ্লিকেট মান নিয়ন্ত্রণের জন্য উন্নত পারফরম্যান্স রয়েছে। HashSet সাধারণত O(1) টাইম কমপ্লেক্সিটি দিয়ে ডুপ্লিকেট চেক করে।
  3. Unordered Nature:
    • Set সাধারণত unordered হয় (যেমন HashSet), তবে LinkedHashSet-এ উপাদানগুলি ইনসার্ট হওয়ার অর্ডারে রাখা হয়, এবং TreeSet উপাদানগুলিকে স্বয়ংক্রিয়ভাবে সাজিয়ে রাখে।

Set Interface-এর Example: Different Implementations

1. HashSet:

HashSet হল Set এর সবচেয়ে সাধারণ এবং জনপ্রিয় বাস্তবায়ন। এটি unordered এবং unique উপাদান ধারণ করে।

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple");  // Duplicate element, will not be added
        
        System.out.println("HashSet: " + set);
    }
}

Output:

HashSet: [Apple, Orange, Banana]

2. LinkedHashSet:

LinkedHashSet হল HashSet এর একটি সংস্করণ, যা উপাদানগুলিকে ইনসার্ট হওয়ার অর্ডারে রাখে।

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple");  // Duplicate element, will not be added
        
        System.out.println("LinkedHashSet: " + set);
    }
}

Output:

LinkedHashSet: [Apple, Banana, Orange]

3. TreeSet:

TreeSet হল Set এর একটি সুশৃঙ্খল (sorted) বাস্তবায়ন, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে।

import java.util.TreeSet;
import java.util.Set;

public class TreeSetExample {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple");  // Duplicate element, will not be added
        
        System.out.println("TreeSet: " + set);
    }
}

Output:

TreeSet: [Apple, Banana, Orange]

  • Set ইন্টারফেসটি unique elements ধারণ করতে ব্যবহৃত হয় এবং এটি ডুপ্লিকেট মানগুলোকে ব্লক করে।
  • HashSet, LinkedHashSet, এবং TreeSet হল Set ইন্টারফেসের জনপ্রিয় বাস্তবায়ন, যেখানে:
    • HashSet দ্রুত পারফরম্যান্স দেয় এবং উপাদানগুলিকে অর্ডার অনুসারে রাখে না।
    • LinkedHashSet ইনসার্ট করার অর্ডারে উপাদানগুলো রাখে।
    • TreeSet উপাদানগুলোকে স্বয়ংক্রিয়ভাবে সাজানো রাখে।
  • Set এর মাধ্যমে unique elements পরিচালনা করা সহজ এবং কার্যকরী, যা ডুপ্লিকেট চেক এবং উচ্চ পারফরম্যান্সে সহায়ক।
Content added By
Promotion

Are you sure to start over?

Loading...